Soru & Cevap

Non-Activity Classtan Hata Dialogu Gösterme

13.01.2014 - 09:10

Merhaba arkadaşlar non-activity bir listenerim var server sorunlarını dinliyor.Bağlantı düştüğünde oradaki bir metoda düşüyor program.O methoda düştüğü an kullanıcı hangi activity sayfasında ne yapıyor bilmiyorum.Kullanıcı nerede olursa olsun bi hata dialogu açtırmak istiyorum internet bağlantısı kesildi gibisinden.aSmack apisinin bir interfacesini implemente edip yapıyorum bu olayı.

9 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-1372-1408467635.jpg
ahmtbrk
13.01.2014 - 01:27

enes bey bana bu 2. yöntem hakkında bi örnek verebilir misiniz? custom application ile son activitynin referansını saklamayla ilgili bu yöntemi bi denemek istiyorum

Enes Şen
13.01.2014 - 01:38
Custom bir Application class ın olacak. Üzerinde static bir activity referansın olacak. Mesela adı lastApplicationUserIsOn gibi. Sonra her activity nin onResume ünde bunu set edeceksin, onPause unda null a çekeceksin. Sonrasında Dialog gösterirken extend ettiğin Application nesnenden bu statik referansı alıp, onunla dialog oluşturacaksın. Extending Application Android şeklinde araştırman da extra yardımcı olacaktır. Kolaylıklar.
Ahmet Burak Demirkoparan
13.01.2014 - 02:00
enes bey dediğiniz olayı yaptım çalışıyor bi sıkıntı yok ama leak gibi bi sıkıntıdan bahsettiniz bana ne gibi bi zararı olabilir acaba?
Enes Şen
13.01.2014 - 02:31
JVM in android karşılığı olan Dalvik, kullanılmayan nesneleri toplarken referanslarına bakıyor. Senin yönteminde o activity kullanılmama durumuna gelince dalvik onu yok etmek isteyecek ama referansı olduğu için yok edemeyecek. Bu da ileride memory sorunları yaşıyor olabileceğine işaret eder. Broadcast li yöntemi denemeni tavsiye ederim.
Ahmet Burak Demirkoparan
16.01.2014 - 12:17
enes bey her seferinde aktivity değiştirdiğimde 1 önceki activitynin referansı yerine yeni activitynin referansı set olmayacak mı? artık eski activitynin hiç bir işlevinin kalmaması lazım mantıken.nasıl dalvik onu öldüremiyor orasını anlayamadım hala
picture-1372-1408467635.jpg
ahmtbrk
13.01.2014 - 12:51

Sizin dediğiniz dialog activity yoluna gidersemde uygulamam artık 3 versionlardan aşşağıda çalışmayacak.Actionbarlarda işin içine girdiğinde bu sorunu çözmek için notitlebar temalar yapıp kendim yukarıyı actionbar yaptım layoutlarla:) şirket uygulaması yazıyorum ne kadar çok sürümde çalışırsa benim için o kadar önemli.

Enes Şen
13.01.2014 - 02:34
@android:style/Theme.Dialog themeini api level 10 ve aşağısında da çalıştığını söyleyebilirin. Linkten de görüldüğü gibi :) http://developer.android.com/reference/android/R.style.html#Theme_Dialog
picture-539-1376512244.jpg
enessen
13.01.2014 - 09:52

Selam Ahmet,

Bunun için birden fazla çözüm var. Mesela Bir BaseActivity yazar ve herbirinin üstüne bir broadCastReceiver yazarsın ve her activiyni bu base den extend edersin. Uyarıyı verdiğin yerde uyarıyı broadcast edersin ve kullanıcı hangi activity üzerinde ise o activity üzerinde gerekli dialog u gösterir, broadCaset intent ini de cancel edersin yada...
biraz daha pratik bir çözümle, Dialot theme li (dialog gibi görünen) bir activy yaparsın ve onu startActivity ile başlatırsın. Kullanıcı hangi sayfada olursa olsun, hatta uygulamadan çıksa bile kullanıcıyı bu yöntemle uyarırsın. 

Bunlar en genel kullanım şekilleri, daha farklı çözümleri de mevcut.

Umarım yardımcı olur, kolaylıklar :)

Ahmet Burak Demirkoparan
13.01.2014 - 10:20
Hocam ben başka bi yol düşündüm internet kesildiğinde methodun içine düştüğünde kullanıcının o an hangi sayfada gezdiğini string olarak alıp activity'e çeviriyorum.Dialog göstereceğim fakat context i bi türlü alamadım activityden burada sıkıntı yaşıyorum. mShowAlertDialog( (Activity) (Class .forName(Listener .getRunningActivityLongName(LoginActivity.activity)) .newInstance()), "Hata !!!", "Beklenmeyen bir sorun ile karşılaşıldı", "Kapat"); activity e sorunsuz çeviriyorum ama bu activityden context alamadım bi türlü nullpointer atıyor
Enes Şen
13.01.2014 - 11:47
Selam Ahmet, Yöntemin android doğasına aykırı epey. Değiştirmende fayda var. ClassForNane ile Activity nin lifeCycle ını bozuyorsun ve Activity nin muhtemelen birden fazla constructor u vardır içine context ve windowToken aldığı. Bir diğer yöntem ile custom bir application yazarak son activity referansını kullanıcı activity değiştirdikçe tutman ama bu da leak lere sebeb olacağı için tavsiye edilmiyor.